package com.example.tellwin.base;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.Nullable;

import com.example.tellwin.R;
import com.example.tellwin.utils.StatusBarUtil;

import java.lang.reflect.Field;


/**
 * Created by Administrator on 2016/11/30
 */
public abstract class CpBaseActivty extends BaseActivity implements BaseContract.BaseView {

    public Activity activity;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //StatusBarUtil.setRootViewFitsSystemWindows(this,true);
        //设置状态栏透明
        StatusBarUtil.setTranslucentStatus(this ,false);
      //  StatusBarUtil.setTranslucentStatus(this, false);
      /*   if(StatusBarUtil.isHaveNavigationBar(this)){
            StatusBarUtil.transportStatus(this);
        }*/

        //一般的手机的状态栏文字和图标都是白色的, 可如果你的应用也是纯白色的, 或导致状态栏文字看不清
        //所以如果你是这种情况,请使用以下代码, 设置状态使用深色文字图标风格, 否则你可以选择性注释掉这个if内容
       /* if (!StatusBarUtil.setStatusBarDarkTheme(this, true)) {
            //如果不支持设置深色风格 为了兼容总不能让状态栏白白的看不清, 于是设置一个状态栏颜色为半透明,
            //这样半透明+白=灰, 状态栏的文字能看得清
            StatusBarUtil.setStatusBarColor(this,0x55000000);
        }*/
        activity = this;
    }

    public void setTitle(int id) {
        TextView textView = findViewById(R.id.act_title_tv);
        if (textView != null) {
            textView.setText(getResources().getString(id));
        }
    }

    public void setTitle(String title) {
        TextView textView = findViewById(R.id.act_title_tv);
        if (textView != null) {
            textView.setText(title);
        }
    }

    @Override
    protected void onStart() {
        super.onStart();
        ImageView backIv = findViewById(R.id.back_iv);
        if (backIv != null) {
            backIv.setOnClickListener(v -> finish());
        }
    }

    protected abstract void initViews();

    protected abstract void initEvents();

    protected abstract void initDatas();

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {

            // 获得当前得到焦点的View，一般情况下就是EditText（特殊情况就是轨迹求或者实体案件会移动焦点）
            View v = getCurrentFocus();

            if (isShouldHideInput(v, ev)) {
                hideSoftKeyboard();
            }
        }
        return super.dispatchTouchEvent(ev);
    }

    /**
     * 根据EditText所在坐标和用户点击的坐标相对比，来判断是否隐藏键盘，因为当用户点击EditText时没必要隐藏
     *
     * @param v
     * @param event
     * @return
     */
    private boolean isShouldHideInput(View v, MotionEvent event) {
        if (v != null && (v instanceof EditText)) {
            int[] l = {0, 0};
            v.getLocationInWindow(l);
            int left = l[0], top = l[1], bottom = top + v.getHeight(), right = left
                    + v.getWidth();
            if (event.getX() > left && event.getX() < right
                    && event.getY() > top && event.getY() < bottom) {
                // 点击EditText的事件，忽略它。
                return false;
            } else {
                return true;
            }
        }
        // 如果焦点不是EditText则忽略，这个发生在视图刚绘制完，第一个焦点不在EditView上，和用户用轨迹球选择其他的焦点
        return false;
    }

    public void hideSoftKeyboard() {
        View view = getWindow().peekDecorView();
        if (view != null) {
            InputMethodManager mInputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            mInputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    }


    @Override
    public void onLoading() {
        showDialog();
    }

    @Override
    public void complete() {
        dismissDialog();
    }

    @Override
    public void showError() {
        dismissDialog();
        toast(getResources().getString(R.string.system_error));
    }

    @Override
    public void showToast(String msg) {
        toast(msg);
    }
}
